package com.sinog.biz.service.business;

import com.sinog.core.domain.PrisonerHc;
import com.sinog.core.domain.PrisonerMain;
import com.sinog.core.model.UserDTO;
import com.sinog.core.utilbean.Result;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * @desc 核查列表
 * @author -
 * @date -
 */
@RestController
public interface VerificationService {

    /**
     * 预安置管理 - 预安置人员核查 - 列表
     * @param pageIndex 起始页 默认:0
     * @param pageSize 止页数 默认:50
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @param departId 当前登录用户机构编码
     * @param level 当前登录用户level
     * @param state 1:待核查 2:核查中 3:核查成功人员 4:核查失败人员
     * @param nameKey 姓名
     * @param sexKey 性别 1:男、2:女
     * @param hjKey 户籍类型 01:户籍完整人员、02:查不清户籍人员
     * @param inputSource 录入来源 01:司法所补录的解矫人员,05:司法所补录的监狱人员,3.看守所录入的服刑人员,4:接口进入的看守所人员,5:监狱录入的服刑人员,6:接口进入的监狱服刑人员,7:社矫录入的服刑人员,8:接口进入的社矫人员,9:监狱通过excel导入,10:社矫通过excel导入,11:看守所通过excel导入,30:湖南看守所个性化对接
     * @param account account
     * @param hcType 核查成功类别 1:一次核查成功、2:二次核查成功、3:三次核查成功、4:查不清户籍核查成功
     * @param zdbjKey 重点帮教对象 1:是、2:否
     * @param shenKey 身份证
     * @param zmKey 罪名
     * @param fxKey 服刑单位
     * @param qitaKeyStr 其他条件
     * @param nativepro 省
     * @param nativecity 市
     * @param nativecou 区
     * @param nativevill 街道
     * @param rjStartDate 原判刑期起日
     * @param rjEndDate 释放日期
     * @return String
     */
    @RequestMapping("/azbj/verification/info/list")
    String getVerificationList(
            @RequestParam("pageIndex") Integer pageIndex,
            @RequestParam("pageSize") Integer pageSize,
            @RequestParam(required = false, name = "sortField") String sortField,
            @RequestParam(required = false, name = "sortOrder") String sortOrder,
            @RequestParam("departId") String departId,
            @RequestParam("level") String level,
            @RequestParam("state") String state,
            @RequestParam("sexKey") String sexKey,
            @RequestParam("nameKey") String nameKey,
            @RequestParam("hjKey") String hjKey,
            @RequestParam(required = false, defaultValue = "-1") String inputSource,
            @RequestParam("account") String account,
            @RequestParam("hcType") String hcType,
            @RequestParam(required = false, name = "zdbjKey") String zdbjKey,
            @RequestParam(required = false, name = "shenKey") String shenKey,
            @RequestParam(required = false, name = "zmKey") String zmKey,
            @RequestParam(required = false, name = "fxKey") String fxKey,
            @RequestParam(required = false, name = "qitaKeyStr") String qitaKeyStr,
            @RequestParam(required = false, name = "nativepro") String nativepro,
            @RequestParam(required = false, name = "nativecity") String nativecity,
            @RequestParam(required = false, name = "nativecou") String nativecou,
            @RequestParam(required = false, name = "nativevill") String nativevill,
            @RequestParam(required = false, name = "rjStartDate") String rjStartDate,
            @RequestParam(required = false, name = "rjEndDate") String rjEndDate);

    /**
     * 修改核查状态
     * @param prinum 罪犯编号
     * @param state 0:未发起核查 1:待核查 2：核查中 3：核查成功 4：核查失败
     * @param data data
     * @param authentication 当前登录用户
     * @return Result
     * @throws ParseException
     */
    @PostMapping("/azbj/verification/hcstate")
    Result updateHcState(
            @RequestParam("prinum") String prinum,
            @RequestParam("state") String state,
            @RequestParam("data") String data,@RequestBody UserDTO authentication) throws ParseException;

    /**
     * 批量修改核查状态
     * @param prinums prinums
     * @param state state
     * @param data data
     * @param userDTO 当前登录用户
     * @return Result
     * @throws ParseException
     */
    @PostMapping("/azbj/verification/plhcstate")
    Result updateHcStatePl(
            @RequestParam("prinums") String prinums,
            @RequestParam("state") String state,
            @RequestParam("data") String data,@RequestBody UserDTO userDTO) throws ParseException;

    /**
     * 预安置管理 - 预安置人员发起核查 - 核查失败 - 再次发起核查
     * @param data data
     * @param userDTO 当前登录用户
     * @return Result
     */
    @PostMapping("/azbj/verification/agreestate")
    Result updateAgreeState(@RequestParam("data") String data,@RequestBody UserDTO userDTO);

    /**
     * 根据id查询核查表信息
     * @param id id
     * @return Map<String,Object>
     */
    @RequestMapping("/azbj/verification-zxhc/id")
    Map<String,Object> getPrisonerHcById(@RequestParam("id") String id);

    /**
     * 根据罪犯编号查询核查信息
     * @param priNum priNum
     * @return List<Map < String,Object>>
     */
    @RequestMapping("/azbj/verification-zxhc/prinum")
    List<Map<String,Object>> getPrisonerHcListByPriNum(@RequestParam("priNum") String priNum);

    /**
     * 转入原侦查机关
     * @param data data
     * @param userDTO 当前登录用户
     * @return Result
     * @throws ParseException
     */
    @PostMapping("/azbj/verification-zryzcjg")
    Result saveZryzcjg(@RequestParam("data") String data,@RequestBody UserDTO userDTO) throws ParseException;

    /**
     * 预安置管理 - 预安置人员核查 - 待办工作 - 办理
     * @param data 业务数据
     * @param user 当前登录用户
     * @return Result
     */
    @PostMapping("/azbj/verification-tuisong/savePrisonerTs")
    Result savePrisonerMainAndHcVo(@RequestParam("data") String data,@RequestBody UserDTO user);

    /**
     * 预安置管理 - 预安置人员核查 - 核查中 - 签收
     * @param priNum 服刑人员编号
     * @param type 1:核查签收,2:出监评估签收,3:完成衔接签收
     * @param userDTO 当前登录用户
     * @return Result
     */
    @PostMapping("/azbj/verification/signFor")
    Result signFor(
            @RequestParam("priNum") String priNum,@RequestParam("type") String type,@RequestBody UserDTO userDTO);

    /**
     * 根据户籍街道编码查询是否有对应的司法所存在
     * @param prisonerMain 基本信息
     * @return Result
     */
    @RequestMapping("/azbj/verification-zxhc/sfsUser")
    Result selectUserByNativevill(@RequestBody PrisonerMain prisonerMain);

    /**
     * 根据罪犯编号获取罪犯全部信息
     * @param priNum 罪犯编号
     * @return PrisonerMain
     */
    @RequestMapping("/azbj/verification/main")
    PrisonerMain getPrisonerMainByPriNum(@RequestParam("priNum") String priNum);

    /**
     * 根据服刑人员编号查找核查信息
     * @param priNum 服刑人员编号
     * @return Result
     */
    @RequestMapping("/azbj/verification/getPrisonerHcByPriNum")
    Result getPrisonerHcByPriNum(@RequestParam("priNum") String priNum);

    /**
     * sfbadmin--系统管理--死数据列表
     * @param pageIndex 起始页 默认:0
     * @param pageSize 止页数 默认:50
     * @param sortField 排序字段
     * @param sortOrder 排序方式
     * @param nameKey 姓名
     * @param sexKey 性别 1:男、2:女
     * @param inputSource 录入来源 01:司法所补录的解矫人员,05:司法所补录的监狱人员,3.看守所录入的服刑人员,4:接口进入的看守所人员,5:监狱录入的服刑人员,6:接口进入的监狱服刑人员,7:社矫录入的服刑人员,8:接口进入的社矫人员,9:监狱通过excel导入,10:社矫通过excel导入,11:看守所通过excel导入,30:湖南看守所个性化对接
     * @param zdbjKey 重点帮教对象 1:是、2:否
     * @param shenKey 身份证
     * @param zmKey 罪名
     * @param fxKey 服刑单位
     * @param nativepro 省
     * @param nativecity 市
     * @param nativecou 区
     * @param nativevill 街道
     * @param rjStartDate 原判刑期起日
     * @param rjEndDate 释放日期
     * @return String
     */
    @RequestMapping("/azbj/xtgl/ssj/list")
    String getSsjList(
            @RequestParam("pageIndex") Integer pageIndex,
            @RequestParam("pageSize") Integer pageSize,
            @RequestParam("sortField") String sortField,
            @RequestParam("sortOrder") String sortOrder,
            @RequestParam("sexKey") String sexKey,
            @RequestParam("nameKey") String nameKey,
            @RequestParam("inputSource") String inputSource,
            @RequestParam("zdbjKey") String zdbjKey,
            @RequestParam("shenKey") String shenKey,
            @RequestParam("zmKey") String zmKey,
            @RequestParam("fxKey") String fxKey,
            @RequestParam("nativepro") String nativepro,
            @RequestParam("nativecity") String nativecity,
            @RequestParam("nativecou") String nativecou,
            @RequestParam( "nativevill") String nativevill,
            @RequestParam("rjStartDate") String rjStartDate,
            @RequestParam("rjEndDate") String rjEndDate);

    /**
     * 根据状态和罪犯编号查询核查信息
     * @param priNum 罪犯编号
     * @param state 核查状态
     * @return PrisonerHc
     */
    @RequestMapping("/azbj/sucess/hc")
    PrisonerHc getPrisonerHcByState(@RequestParam("priNum")String priNum,@RequestParam("state")String state);
}